import request from '@/utils/request'

// 聊天记录接口
export interface ChatRecord {
  id: string
  title: string
  lastMessage: string
  updatedAt: Date
  messageCount: number
  topic?: string
}

// 获取近期对话记录
export function getRecentChats(limit: number = 3): Promise<ChatRecord[]> {
  return request({
    url: '/api/chat/recent',
    method: 'get',
    params: { limit }
  })
}

// 获取聊天详情
export function getChatDetail(chatId: string): Promise<any> {
  return request({
    url: `/api/chat/${chatId}`,
    method: 'get'
  })
}

// 删除聊天记录
export function deleteChat(chatId: string): Promise<void> {
  return request({
    url: `/api/chat/${chatId}`,
    method: 'delete'
  })
}

// 发送消息
export function sendMessage(data: {
  content: string
  chatId?: string
  topic?: string
  files?: File[]
  searchSources?: string[]
  enterpriseKnowledge?: Array<{id: string, name: string}>
  personalKnowledge?: Array<{id: string, name: string}>
}): Promise<any> {
  return request({
    url: '/api/chat/send',
    method: 'post',
    data
  })
}

// 无知识库聊天接口 - SSE流式响应
export function translateMessage(sessionStamp: string, message: string, model_name: string) {
  // 构建完整的URL，在开发环境中使用相对路径（会被Vite代理），生产环境使用完整URL
  
  const baseUrl = import.meta.env.DEV ? '' : (import.meta.env.VITE_API_SSE_URL || 'https://apt.qmzhiku.com/api')
  const url = `${baseUrl}/ai_chat/translate?session_stamp=${encodeURIComponent(sessionStamp)}&message=${encodeURIComponent(message)}&model_name=${encodeURIComponent(model_name)}`
  
  console.log('SSE请求URL:', url) // 调试用
  return new EventSource(url)
}

// 知识库聊天接口 - SSE流式响应
export function knowledgeChatCompletion(sessionStamp: string, message: string, knowledgeData: {
  enterpriseKnowledge?: Array<{id: string, name: string}>
  personalKnowledge?: Array<{id: string, name: string}>
  searchSources?: string[]
},model_name:string) {
  // 构建完整的URL，在开发环境中使用相对路径（会被Vite代理），生产环境使用完整URL
  
  const baseUrl = import.meta.env.DEV ? '/api' : (import.meta.env.VITE_API_SSE_URL || 'https://apt.qmzhiku.com/api')
  
  // 构建查询参数
  const params = new URLSearchParams({
    // session_stamp: sessionStamp,
    question: message
  })
  
  // 添加知识库数据
/*   if (knowledgeData.enterpriseKnowledge && knowledgeData.enterpriseKnowledge.length > 0) {
    params.append('enterprise_knowledge', JSON.stringify(knowledgeData.enterpriseKnowledge))
  }
  
  if (knowledgeData.personalKnowledge && knowledgeData.personalKnowledge.length > 0) {
    params.append('personal_knowledge', JSON.stringify(knowledgeData.personalKnowledge))
  }
   */
  // 总是添加模型名称
  params.append('model_name', model_name)
  
  const url = `${baseUrl}/vkdb/chat_completion?${params.toString()}`
  
  console.log('知识库聊天SSE请求URL:', url) // 调试用
  return new EventSource(url)
}

// 模拟数据（用于开发阶段）
export function getMockRecentChats(limit: number = 3): ChatRecord[] {
  const mockData: ChatRecord[] = [
    {
      id: 'chat-001',
      title: '管道施工流程咨询',
      lastMessage: '管道施工的基本流程包括：1. 施工准备 2. 管道安装...',
      updatedAt: new Date(Date.now() - 1000 * 60 * 30), // 30分钟前
      messageCount: 8,
      topic: 'pipeline-construction'
    },
    {
      id: 'chat-002', 
      title: '焊接工艺标准查询',
      lastMessage: '焊接工艺控制要点：焊接参数设定、焊接顺序安排...',
      updatedAt: new Date(Date.now() - 1000 * 60 * 60 * 2), // 2小时前
      messageCount: 12,
      topic: 'welding-construction'
    },
    {
      id: 'chat-003',
      title: '管道维修技术讨论', 
      lastMessage: '管道维修的关键步骤包括：故障诊断、维修方案制定...',
      updatedAt: new Date(Date.now() - 1000 * 60 * 60 * 24), // 1天前
      messageCount: 15,
      topic: 'pipeline-maintenance'
    },
    {
      id: 'chat-004',
      title: '施工安全规范咨询',
      lastMessage: '施工现场安全管理要求：个人防护用品佩戴、安全标识设置...',
      updatedAt: new Date(Date.now() - 1000 * 60 * 60 * 24 * 2), // 2天前
      messageCount: 6,
      topic: 'safety-standards'
    },
    {
      id: 'chat-005',
      title: '工程质量控制要点',
      lastMessage: '工程质量控制的关键环节包括：材料检验、施工工艺、验收标准...',
      updatedAt: new Date(Date.now() - 1000 * 60 * 60 * 24 * 3), // 3天前
      messageCount: 10,
      topic: 'quality-control'
    }
  ]
  
  // 按更新时间排序，返回最新的记录
  return mockData
    .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime())
    .slice(0, limit)
}
